package org.fishwife.jrugged.spring;

import java.util.concurrent.Callable;

import org.springframework.util.concurrent.ListenableFuture;

public interface ServiceWrapper extends org.fishwife.jrugged.ServiceWrapper {

    /** Wraps a {@link java.util.concurrent.Callable} in some fashion.
     *  @param callable the service call to wrap
     *  @return {@link ListenableFuture} of whatever <code>callable</code> would normally return
     *  @throws Exception because it's part of the {@link Callable#call()} method signature. Exceptions must be handled in the callback methods.
     */
    <T> ListenableFuture<T> invokeAsync(Callable<ListenableFuture<T>> callable) throws Exception;
}